package com.xuelang.pipeline.app.pipeline;

import com.xuelang.pipeline.client.common.constant.DictDTO;
import com.xuelang.pipeline.client.common.request.PageParam;
import com.xuelang.pipeline.client.common.result.PageRecord;
import com.xuelang.pipeline.client.pipeline.dto.*;

import jakarta.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 流水线服务接口
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
public interface PipelineService {
    /**
     * 查询流水线列表(有过滤条件)
     *
     * @param dtoPageParam
     * @return
     */
    PageRecord<PipelineDTO> pageList(PageParam<PipelineQuery> dtoPageParam);

    /**
     * 查询我的流水线列表（有过滤条件）
     * @param dtoPageParam
     * @return
     */
    PageRecord<MyPipelineInfoDTO> pageMyPipelineList(PageParam<MyPipelineQuery> dtoPageParam);

    /**
     * 查询流水线列表(有过滤条件)
     *
     * @param pipelineQuery
     * @return
     */
    List<PipelineDTO> list(PipelineQuery pipelineQuery);

    /**
     * 添加流水线
     *
     * @param pipelineConfigDTO
     * @return
     */
    Boolean add(PipelineConfigDTO pipelineConfigDTO);

    /**
     * 更新流水线
     *
     * @param pipelineConfigDTO
     * @return
     */
    Boolean update(PipelineConfigDTO pipelineConfigDTO);

    /**
     * 删除流水线
     *
     * @param code
     * @return
     */
    Boolean delete(String code);

    /**
     * 查询流水线
     *
     * @param code
     * @return
     */
    PipelineDTO query(String code);

    /**
     *
     * @param componentLabel
     * @return
     */
    List<PipelineDTO> queryByComponentLabel(String componentLabel);

    /**
     * 查询组件流水线信息
     *
     * @param pipelineQuery
     * @return
     */
    ComponentPipelineDTO componentPipeline(ComponentPipelineQuery pipelineQuery);

    /**
     * 获取流水线配置信息
     *
     * @param code 流水线编码
     * @return
     */
    PipelineConfigDTO pipelineConfig(String code);


    /**
     * 查询流水线部署任务环境配置
     *
     * @param deployCompTaskQuery
     * @return
     */
    List<DictDTO> queryDeployEnvDict(DeployCompTaskQuery deployCompTaskQuery);


    /**
     * 查询流水线yaml格式配置，仅供查看
     *
     * @param code
     * @return
     */
     String queryYamlConfig(String code);


    /**
     *  根据流水线code触发流水线，进行运行态
     * @param triggerPipelineDTO  触发参数
     * @return
     */
    Boolean triggerPipelineInstance(TriggerPipelineDTO triggerPipelineDTO);

    /**
     *  根据流水线code集合 批量触发流水线
     * @param pipelineCodeList  流水线code集合
     * @return
     */
    Boolean batchTriggerPipelineInstance(List<String> pipelineCodeList);

    /**
     *  根据流水线code取消/停止流水线
     *
     * @param pipelineCode@return
     */
    Boolean cancelPipelineInstance(String pipelineCode);

    /**
     * 任务节点日志下载接口
     * @param envId
     * @param podName
     * @param containerName
     * @param response
     */
    void downloadTaskLog(String envId, String podName, String containerName, HttpServletResponse response);

    /**
     * 查询一个流水线的通知用户列表
     *
     * @param pipelineCode
     * @return
     */
    List<String> findPipelineNotifyReceiverList(String pipelineCode);

}
